Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zagnieżdżona pętla i wyjście.


Rekomendowane odpowiedzi

Opublikowano

Czy w języku C jest jakiś sposób na wyjście z zagnieżdżonej pętli, nie naruszając przy tym "rodzica" ?

Chodzi mi o coś takiego:

for()
{
  for()
  {
     break; //tu wyjdzie z tej petli ale nie wyjdzie z tej pierwszej
  }
}

Osobiście pomagam tylko na PW lub e-mail


-----------------------------------------------------------------


https://github.com/smietanka

Opublikowano

można też skorzystać z lambdy

[tutaj ewentualny capture zmiennych, które są potrzebne]{
	for()
	{
		for()
		{
			return;
		}
	}
}();

Ale użycie goto w takiej sytuacji też jest dobry wyjściem.

Opublikowano

Tzn. inaczej. Chcę napisać program który wyszukuje czy tablica B zawiera się w tablicy A. Oczywiście wszystkie elementy tablicy B muszą być w tej samej kolejności co w A.

Łatwym było by zrobienie tego na wzór jakiegoś sortowania np, babelkowego, ale ono musiało by przejść po każdym elemencie drugiej tablicy i pierwszej, nie ważne że jakaś liczba by się nie zgadzała. To by było proste do zrobienia. Ale w celu zredukowania ilości operacji postanowiłem spróbować napisać 2 pętle, i jeżeli pierwszy element tablicy B jest równy 1 elementowi tablicy A to zwiększa i i j o 1. I tak by były sprawdzane każde elementy, problem gdy 2 element nie jest równy 2 elementowi tablicy A, wtedy w drugiej pętli iteracja by się zerowała a pętla która jest wyżej obróciła się dalej, w celu szukania czy 1 element tablicy B jest równy 3 elementowi tablicy A. Mam nadzieje że ktoś zrozumiał ;)

Osobiście pomagam tylko na PW lub e-mail


-----------------------------------------------------------------


https://github.com/smietanka

Opublikowano

jeśli dobrze rozumiem problem

std::vector<int> a;
std::vector<int> b;
...
bool czyZawiera = (std::search(a.begin(), a.end(), b.begin(), b.end()) != a.end());

vectory a i b możesz odpowiednio zamienić na każdy kontener, które posiada forward iterator. Czyli dla tablic też (wskaźnik spełnia założenia dla forward iterator). Musisz tylko podać wskaźnik na początek tej tablicy i wskaźnik na jeden element po ostatnim.

np tak

int a[20];
int b[6];
...
bool czyZawiera = (std::search(std::begin(a), std::end(a), std::begin(, std::end() != std::end(a));

Wszystko stąd znajdziesz na cppreference

Opublikowano

a w d***e, nie będe się cackał. W dzisiejszej dobie techniki komputerowej kilka obliczeń więcej nie robi znaczenia... szkoda że na studiach dla wykładowcy jedna spacja więcej to strata pamięci xD

Osobiście pomagam tylko na PW lub e-mail


-----------------------------------------------------------------


https://github.com/smietanka

Opublikowano

Akurat implementacje biblioteki standardowej C++ są dosyć dobrze zoptymalizowane i ciężko napisać coś bardziej wydajnego rozwiązującego podobne problemy.

Nie mówię tu oczywiście o jakichś specyficznych algorytmach czy przypadkach, ale twój problem najlepiej rozwiązać korzystając z biblioteki standardowej (i pewnie też najwydajniej)

 

@down

przepraszam, teraz dopiero zauważyłem

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...